package com.sayonaragutgut.android.core;

import java.io.Reader;
import java.lang.IllegalStateException;

public class PesquisadorApinfo {
	public static final byte PESQUISA_FALHA = 0x00;
	public static final byte PESQUISA_SUCESSO_CAPTCHA_RESOLVIDO = 0x01;
	public static final byte PESQUISA_SUCESSO_CAPTCHA_NAO_RESOLVIDO = 0x02;
	
	private static final byte ESTADO_PESQUISA_NAO_EXECUTADA = 0xF0;
	private static final byte ESTADO_READER_DISPONIBILIZADO = 0xF1;
	private static final byte ESTADO_AGUARDANDO_CAPTCHA = 0xF2;
	
	private int mInternalState;
	private Reader mResultReader;
	
	public PesquisadorApinfo() {
		mInternalState = PesquisadorApinfo.ESTADO_PESQUISA_NAO_EXECUTADA;
	}
	
	public interface PesquisaConcluidaListener {
		void onPesquisaConcluida(int result);
	}
	
	public void pesquisar(PesquisaConcluidaListener listener) // posteriormente, sera incluida um parametro
															  // contendo os criterios da pesquisa
	{
		if (mInternalState != PesquisadorApinfo.ESTADO_PESQUISA_NAO_EXECUTADA) {
			throw new IllegalStateException("Este método só pode ser invocado caso nenhuma pesquisa tenha sido realizada. " +
					"caso deseje realizar uma nova pesquisa, faz-se necessária a criação de uma nova instância desta classe");
		}
		
		// deverá ser preenchido com um Reader contendo o html da página de resultados:
		mResultReader = null; 
		mInternalState = PesquisadorApinfo.ESTADO_READER_DISPONIBILIZADO;
		
		if (null != listener) {
			listener.onPesquisaConcluida(PesquisadorApinfo.PESQUISA_SUCESSO_CAPTCHA_RESOLVIDO);
		}
	}
	
	public void rePesquisarComCaptcha(PesquisaConcluidaListener listener, String captchaCode) {
		if (mInternalState != PesquisadorApinfo.ESTADO_AGUARDANDO_CAPTCHA)
			throw new IllegalStateException("Este objeto não está aguardando o valor de um captcha.");
		
		// apenas para teste:
		pesquisar(listener);
	}
	
	public Reader getResultadoHtmlReader() {
		if (mInternalState != PesquisadorApinfo.ESTADO_READER_DISPONIBILIZADO)
			throw new IllegalStateException("Não foi disponilizado um Reader com os resultados. Favor observar a sequencia" +
					"apropriada de chamadas aos métodos.");
		
		return mResultReader;
	}
	
	public Reader getCaptchaReader() {
		// retornar a imagem do captcha aqui, para que seja exibida pela Activity em vigor
		return null;
	}
}
